#include "AutoUnitTest.h"
#include "../src/Diagnostic.h"
#include <math.h>

void Run_Auto_UnitTests_Test_1()
{
	printf("/*   Test: Run_Auto_UnitTests_Test_1               */\n");
	Auto a;

	a.UpdateBrakeDes(110);
	for(int i = 0; i< 1000; i++)
	{
		a.DRIVE();
	}
	CheckResult(a.GetVehicleSpeed() == 0);
	CheckResult(a.GetGear() == 0);
	CheckResult(a.GetEngineSpeed() == 800);
}

void Run_Auto_UnitTests_Test_2()
{
	printf("/*   Test: Run_Auto_UnitTests_Test_2               */\n");
	Auto a;
	
	Diagnostic::PS = 500;

	a.UpdateSpeedDes(200);
	for(int i = 0; i< 500; i++)
	{
		a.DRIVE();
		printf("%d:%d:%d\n", a.GetVehicleSpeed(), a.GetEngineSpeed(), a.GetGear());
	}

	CheckResult( abs((Int16)a.GetVehicleSpeed() - 100) < 2); // 2kmh Abweichung
	CheckResult(a.GetGear() == 5);
}

void Run_Auto_UnitTests_Test_3()
{
	printf("/*   Test: Run_Auto_UnitTests_Test_3               */\n");
	
	Auto a;
	Diagnostic::PS = 500;

	a.UpdateSpeedDes(200);

	for(int i = 0; i < 500; i++)
	{
		a.DRIVE();
	}

	a.UpdateSpeedDes(0);

	for(int i = 0; i < 2000; i++)
	{
		a.DRIVE();
		printf("%d:%d:%d\n", a.GetVehicleSpeed(), a.GetEngineSpeed(), a.GetGear());
	}

	CheckResult(0);
}

void Run_Auto_UnitTests()
{
	Run_Auto_UnitTests_Test_1();
	Run_Auto_UnitTests_Test_2();
	Run_Auto_UnitTests_Test_3();
}


